【Swift】UIImageViewではなくて、UIImageを角丸にする
UIImage
を角丸にしたいと思い、「UIImage cornerRadius」と調べると、UIImageView
を角丸にする方法が沢山出てきて困ってしまいました。同じ境遇の方の助けになればと思い、今回はUIImage
を角丸にする方法を記載しておきます。
環境
- Xcode 14
はじめに
UIImageViewを角丸にする方法
imageView.layer.cornerRadius = 22
Imageを角丸にする方法
Image("somethingYouWantToShow") .resizable() .frame(width: 200, height: 200) .cornerRadius(20)
上記のような感じでImage
やUIImageView
の角丸は手軽に出来ます。
UIImageを角丸にする
UIImage
を角丸にする為にUIGraphicsImageRenderer
を使用して角丸画像を作成していきます。
今回はUIImage
のExtensionを作成して、汎用的に使えるようにしてみます。
extension UIImage { func roundedCorners(radius: CGFloat) -> UIImage { return UIGraphicsImageRenderer(size: self.size).image { context in let rect = context.format.bounds // Rectを角丸にする let roundedPath = UIBezierPath(roundedRect: rect, cornerRadius: radius) roundedPath.addClip() // UIImageを描画 draw(in: rect) } } }
今回は特にリサイズ等は行わないのでUIGraphicsImageRenderer
のサイズには自身のサイズを渡しています。
その後、UIGraphicsImageRendererContext
のformat.bounds
から今回のレンダラーのboundsが取得出来るので画像のCGRect
を取得します。そのCGRect
に角丸を加える為、UIBezierPath
に引数で受け取ったcornerRadius
の値を渡します。
角丸用のパスができたので、addClip
を使用して現在の形状をクリッピングパスにします。
あとは、draw(in:)
メソッドを使用して、指定したrectで描画すると、クリッピングパスが反映された形状のUIImage
が出来上がります。
使用例
角丸無し
Image(uiImage: UIImage(named: "lilossa")!)
角丸有り
Image(uiImage: UIImage(named: "lilossa")! .roundedCorners(radius: 40))
おわりに
UIGraphicsImageRenderer
を使用して、UIImage
を好きな形状に加工できることが分かりました。大人の事情でUIImage
自体を角丸にしたい方にこの記事が届けばと思います。